package cc.yaomm.common.basic.excel;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.event.AnalysisEventListener;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * <p>@Description : 导入Excel的配置接口 </p>
 * <p>@Author : QiLin.Xing </p>
 * <p>@Date : 2021/7/21 14:47 </p>
 */
public interface ExcelImportConfig<T> {

    /**
     * <p>@Description : 支持上传文件的大小，默认2M</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2021/7/21 14:48 </p>
     */
    default int getFileSize() {
        return 2 * 1024 * 1024;
    }

    /**
     * <p>@Description : 支持上传文件的格式，默认XLS\XLSX </p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2021/7/21 14:50 </p>
     */
    default List<String> getFileFormat() {
        List<String> list = new ArrayList<>(2);
        Collections.addAll(list, "XLS", "XLSX");
        return list;
    }

    /**
     * <p>@Description : 获取上传文件的临时文件的基础目录 </p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2021/7/21 14:51 </p>
     */
    MultipartFile getFile();

    /**
     * <p>@Description : 获取表头的行数 </p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2021/7/21 15:40 </p>
     */
    default int getHeadRowNum() {
        return 1;
    }

    /**
     * <p>@Description : 获取数据模型类型</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/5 0005 下午 16:12 </p>
     *
     * @return java.lang.Class
     */
    Class<T> getModelClass();

    /**
     * <p>@Description : 获取解析excel的监听器 </p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2021/7/21 14:55 </p>
     */
    AnalysisEventListener<T> getListener();

    /**
     * <p>@Description : 获取数据转换器 </p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2021/7/21 15:36 </p>
     */
    default List<Converter> getConverts() {
        return new ArrayList<>();
    }
}
